(function () {
        var TOGGLE_CLASSNAME = 'expanded',
            CHAPTER = '.chapter',
            ARTICLES = '.articles',
            TRIGGER_TEMPLATE = '<i class="exc-trigger fa"></i>',
            LS_NAMESPACE = 'expChapters';
        var init = function () {
            // adding the trigger element to each ARTICLES parent and binding the event
            var chapterLink = $(ARTICLES).parent(CHAPTER).children('a');
            chapterLink.append($(TRIGGER_TEMPLATE));
            chapterLink.on('click', function (e) {
                e.preventDefault();
                //e.stopPropagation();
                toggle($(e.target).closest(CHAPTER));
            });

            expand(lsItem());
            //expand current selected chapter with it's parents
            collapse($(CHAPTER));
            var activeChapter = $(CHAPTER + '.active');
            expand(activeChapter);
            expand(activeChapter.parents(CHAPTER));
        }
        //on page.change will happend the function.

        var toggle = function ($chapter) {
            if ($chapter.hasClass('expanded')) {
                collapse($chapter);
            } else {
                expand($chapter);
                //$chapter.addClass('active').siblings().removeClass('active');
            }
        }
        var collapse = function ($chapter) {
            if ($chapter.length && $chapter.hasClass(TOGGLE_CLASSNAME)) {
                $chapter.removeClass(TOGGLE_CLASSNAME);
                lsItem($chapter);
            }
        }
        var expand = function ($chapter) {
            if ($chapter.length && !$chapter.hasClass(TOGGLE_CLASSNAME)) {
                $chapter.addClass(TOGGLE_CLASSNAME);
                lsItem($chapter);
            }
        }
        var lsItem = function () {
            var map = JSON.parse(localStorage.getItem(LS_NAMESPACE)) || {}
            if (arguments.length) {
                var $chapters = arguments[0];
                $chapters.each(function (index, element) {
                    var level = $(this).data('level');
                    var value = $(this).hasClass(TOGGLE_CLASSNAME);
                    map[level] = value;
                })
                localStorage.setItem(LS_NAMESPACE, JSON.stringify(map));
            } else {
                return $(CHAPTER).map(function (index, element) {
                    if (map[$(this).data('level')]) {
                        return this;
                    }
                })
            }
        }

        init()
})();


